/*
 * Timer.c
 *
 *  Created on: 2025年7月5日
 *      Author: 黄少杰
 */
#include "Timer.h"
fsp_err_t err = FSP_SUCCESS;



uint8_t s_s,ss;
int f_flag = 0;
float f_t = 0.0f;



//RTC变量
/* rtc_time_t is an alias for the C Standard time.h struct 'tm' */
rtc_time_t set_time =
{
    .tm_sec  = 50,      /* 秒，范围从 0 到 59 */
    .tm_min  = 59,      /* 分，范围从 0 到 59 */
    .tm_hour = 23,      /* 小时，范围从 0 到 23*/
    .tm_mday = 28,      /* 一月中的第几天，范围从 1 到 31*/
    .tm_mon  = 1,       /* 月份，范围从 0 到 11*/
    .tm_year = 125,     /* 自 1900 起的年数，2025为125*/
    .tm_wday = 5,       /* 一周中的第几天，范围从 0 到 6*/
//    .tm_yday=0,       /* 一年中的第几天，范围从 0 到 365*/
//    .tm_isdst=0;      /* 夏令时*/
};

//RTC闹钟变量
rtc_alarm_time_t set_alarm_time=
{
     .time.tm_sec  = 10,      /* 秒，范围从 0 到 59 */
     .time.tm_min  = 30,      /* 分，范围从 0 到 59 */
     .time.tm_hour = 12,      /* 小时，范围从 0 到 23*/
     .time.tm_mday = 1,       /* 一月中的第几天，范围从 1 到 31*/
     .time.tm_mon  = 2,       /* 月份，范围从 0 到 11*/
     .time.tm_year = 125,     /* 自 1900 起的年数，2025为125*/
     .time.tm_wday = 6,       /* 一周中的第几天，范围从 0 到 6*/

     .sec_match        =  1,
     .min_match        =  0,
     .hour_match       =  0,
     .mday_match       =  0,
     .mon_match        =  0,
     .year_match       =  0,
     .dayofweek_match  =  0,
    };

//RTC回调函数
volatile bool rtc_flag = 0;//RTC延时1s标志位
volatile bool rtc_alarm_flag = 0;//RTC闹钟
/* Callback function */
void rtc_callback(rtc_callback_args_t *p_args)
{
    /* TODO: add your own code here */
    if(p_args->event == RTC_EVENT_PERIODIC_IRQ)
        rtc_flag=1;
    else if(p_args->event == RTC_EVENT_ALARM_IRQ)
        rtc_alarm_flag=1;
}


void Timer_Init()
{
    /**********************RTC开启***************************************/
    err = R_RTC_Open(&g_rtc0_ctrl, &g_rtc0_cfg);

    /* Handle any errors. This function should be defined by the user. */
    assert(FSP_SUCCESS == err);

    /* Set the RTC clock source. Can be skipped if "Set Source Clock in Open" property is enabled. */
    R_RTC_ClockSourceSet(&g_rtc0_ctrl);
    /* R_RTC_CalendarTimeSet must be called at least once to start the RTC */
    R_RTC_CalendarTimeSet(&g_rtc0_ctrl, &set_time);
    /* Set the periodic interrupt rate to 1 second */
    R_RTC_PeriodicIrqRateSet(&g_rtc0_ctrl, RTC_PERIODIC_IRQ_SELECT_1_DIV_BY_256_SECOND);//3.9ms中断

    R_RTC_CalendarAlarmSet(&g_rtc0_ctrl, &set_alarm_time);


}
rtc_time_t get_time;

void Timer_Interrupt()
{

    if(rtc_flag)
      {
        R_RTC_CalendarTimeGet(&g_rtc0_ctrl, &get_time);//获取RTC计数时间
                   rtc_flag=0;

//                   if(++s_s > 254)
//                   {
//                       ss++;
//                       s_s = 0;
//                   }
                   GXT310_read_result1(0x90);

                   if(Tem_Flag)
                   {
                       if(++s_s > 10)
                       {
                           if(++iii>=100){iii=100;}
                           s_s = 0;
                       }
                   }

//                   if(iii>=100)
//                       iii=100;


                   if(iii==100 && f_flag == 0)
                   {
                       f_flag = 1;
                   }

                   if(f_flag == 1)
                   {
                       Beep_delayms(888);
                       f_t = Temperature1;
                       f_flag = 2;
                   }

//                   ws2812_rgb(1,20,0,20);
//                   ws2812_rgb(2,20,20,0);
//                   ws2812_rgb(3,0,20,20);
//                   //ws2812_rgb_all(3,0,20,0);
//                   ws2812_refresh(3);
//                       GXT310_read_result1(0x90);
      }


}
